#ifndef BACKPACK_VIEW_H_
#define BACKPACK_VIEW_H_

#include "UserActivityVariant.hpp"

#include <string>
#include <sstream>

namespace backpack {


#if 0
struct ViewConcept {

  // interface required by view implementations
  NodeDescriptionBuilder<TerminalView> newNodeDescription();
  UserChoiceBuilder<TerminalView> newUserChoice();
  void showMessage(std::string const& message);
  void showNewItem(ItemVariant const& item);

}; // struct ViewConcept
#endif



template <class View>
struct NodeDescriptionBuilder {

  // all methods must be implemented in speializations
	void setNodeDescription(std::string && description);
	void addWayPointDescription(std::string && description);
	void addTouchPointDescription(std::string && description);
	void addUnlockPointDescription(std::string && description);
	void waitForPlayerConfirmation() const;

}; // struct NodeDescriptionBuilder
	


template <class View>
struct UserChoiceBuilder {

  // all methods must be implemented in specializations
  void setTitle(std::string && titile);
  void addOption(std::string && description, UserActivityVariant &&);
  void addOption(char key, std::string && description, UserActivityVariant&&);
  UserActivityVariant const& letPlayerChoose();

}; // struct UserChoiceBuilder



} // namespace backpack

#endif // BACKPACK_VIEW_H_

